// 不使用字节对齐
#pragma pack(1)
typedef struct shp_head
{
    int File_Code;
    int Unused[5];
    int File_Lenth;
    int Version;
    int Shape_Type;
    double X_min, Y_min, X_max, Y_max;
    double Z_min, Z_max, M_min, M_max;
};
typedef struct recorde_head
{
    int recorde_id, content_lenth;
    int type;
};
typedef struct point
{
    double x, y;
};
typedef struct line
{
    // The Bounding Box is stored in the order Xmin, Ymin, Xmax, Ymax
    double box[4];
    int NumParts;
    int NumPoints;
    int *parts;
    point *points;
};
typedef struct ploygon
{
    // int type;
    double box[4];
    int NumParts;
    int NumPoints;
    int *parts;
    double *points;
};